﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Models;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;


namespace DAL
{
    public class ApontamentosDAL
    {
        private string connectionString = ConfigurationManager.ConnectionStrings["ScrumDB"].ConnectionString;
                
        public List<Apontamentos> Listar()
        {

            List<Apontamentos> lista = new List<Apontamentos>();

            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT CodigoApontamento, CodigoTarefa, DataAtividade, HorasRealizadas FROM Apontamentos";

            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                lista.Add(
                    new Apontamentos
                    {
                        CodigoApontamento = reader.GetInt32(0),
                        CodigoTarefa = reader.GetInt32(1),
                        DataAtividade = reader.GetDateTime(2),
                        HorasRealizadas = reader.GetDecimal(3)
                    }
                );
            }
            reader.Close();
            connection.Close();

            return lista;


        }

        public Apontamentos Ler(int CodigoApontamento)
        {

            Apontamentos instancia = null;

            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT CodigoApontamento, CodigoTarefa, DataAtividade, HorasRealizadas FROM Apontamentos WHERE CodigoApontamento = @CodigoApontamento";

            // Tratar parametro de entrada
            SqlParameter parameter = command.CreateParameter();
            parameter.ParameterName = "CodigoApontamento";
            parameter.Value = CodigoApontamento;
            parameter.DbType = DbType.Int32;
            command.Parameters.Add(parameter);


            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            if (reader.Read())
            {
                instancia =
                    new Apontamentos
                    {

                        CodigoApontamento = reader.GetInt32(0),
                        CodigoTarefa = reader.GetInt32(1),
                        DataAtividade = reader.GetDateTime(2),
                        HorasRealizadas = reader.GetDecimal(3)

                    };

            }
            reader.Close();
            connection.Close();
            return instancia;
        }

        public void Incluir(Apontamentos instancia)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = connection.CreateCommand();
            command.CommandText =
                @"INSERT INTO Apontamentos (CodigoTarefa, DataAtividade, HorasRealizadas) VALUES (@CodigoTarefa, @DataAtividade, @HorasRealizadas)";

            SqlParameter parameter2 = command.CreateParameter();
            parameter2.ParameterName = "CodigoTarefa";
            parameter2.Value = instancia.CodigoTarefa;
            parameter2.DbType = DbType.Int32;
            command.Parameters.Add(parameter2);

            SqlParameter parameter3 = command.CreateParameter();
            parameter3.ParameterName = "DataAtividade";
            parameter3.Value = instancia.DataAtividade;
            parameter3.DbType = DbType.DateTime;
            command.Parameters.Add(parameter3);

            SqlParameter parameter4 = command.CreateParameter();
            parameter4.ParameterName = "HorasRealizadas";
            parameter4.Value = instancia.HorasRealizadas;
            parameter4.DbType = DbType.Decimal;
            command.Parameters.Add(parameter4);

            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }

        public void Alterar(Apontamentos instancia)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = connection.CreateCommand();
            command.CommandText =
                @"UPDATE Apontamentos SET CodigoTarefa=@CodigoTarefa, DataAtividade=@DataAtividade, HorasRealizadas=@HorasRealizadas
                                      WHERE CodigoApontamento=@CodigoApontamento";

            SqlParameter parameter1 = command.CreateParameter();
            parameter1.ParameterName = "CodigoTarefa";
            parameter1.Value = instancia.CodigoTarefa;
            parameter1.DbType = DbType.Int32;
            command.Parameters.Add(parameter1);

            SqlParameter parameter2 = command.CreateParameter();
            parameter2.ParameterName = "DataAtividade";
            parameter2.Value = instancia.DataAtividade;
            parameter2.DbType = DbType.DateTime;
            command.Parameters.Add(parameter2);

            SqlParameter parameter3 = command.CreateParameter();
            parameter3.ParameterName = "HorasRealizadas";
            parameter3.Value = instancia.HorasRealizadas;
            parameter3.DbType = DbType.Decimal;
            command.Parameters.Add(parameter3);

            SqlParameter parameter4 = command.CreateParameter();
            parameter4.ParameterName = "CodigoApontamento";
            parameter4.Value = instancia.CodigoApontamento;
            parameter4.DbType = DbType.Int32;
            command.Parameters.Add(parameter4);


            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();

        }

        public void Excluir(int CodigoApontamento)
        {

            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = connection.CreateCommand();
            command.CommandText =
                @"DELETE FROM Apontamentos WHERE CodigoApontamento = @CodigoApontamento";                

            // Tratar parametro de entrada
            SqlParameter parameter = command.CreateParameter();
            parameter.ParameterName = "CodigoApontamento";
            parameter.Value = CodigoApontamento;
            parameter.DbType = DbType.Int32;
            command.Parameters.Add(parameter);


            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }


        public int CodigoTarefa { get; set; }
    }
}